#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <signal.h>
#include <libgen.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/uio.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <net/if.h>

#include "can.h"
#include "can_msg.h"
#include "printf.h"




static int can_msg(int id, char *file)
{
	int ret;
	//  保存整个文件数据（最大64kBytes）
	static char  file_data[64 * 1024];  

	// 1. 数据读取到内存。
	int fd = open(file, O_RDONLY | O_SYNC);
	if (fd < 0)
	{
		debug("open(%s) error\n", file);
	    return -1;
	}

	struct stat status;
	ret = fstat(fd, &status);
	if (ret < 0)
	{
		debug("fstat() error \n");
		close(fd);
	    return -1;
	}
	size_t file_size = status.st_size;
	if (file_size > sizeof(file_data))
	{
		debug("size=%d > %d; error \n", file_size, sizeof(file_data));
		close(fd);
	    return -1;
	}
	
	ssize_t read_size = read(fd, file_data, file_size);  // 文件数据读到buffer
	if (read_size < 1)
	{
		debug("%s,%d,read() error \n",__func__, __LINE__);
		close(fd);
	    return -1;
	}
	printf("read_size = %d, file_size =%d\n", read_size, file_size);
	close(fd);

	// 2. 发送内存中的数据
	ret = can_send(id, file_data, read_size);
	if (ret < 0)
	{
		debug("can_send() error \n");
		return -1;
	}

	return 0;
}

static void usage(void)
{
	printf("usage: can  id  <file> \n");
	printf("         id  : 0=can0, 1=can1 \n");
	printf("         file: path and file  \n");
}


int main(int argc, char *argv[])
{
	if (argc != 3)
	{
		usage();
		return -1;
	}

	int id;
	if (strcmp(argv[1],  "0") == 0)
		id = 0;
	else if(strcmp(argv[1], "1") == 0)
		id = 1;
	else
	{
		usage();
		return -1;
	}
		
	
	int ret = can_msg(id, argv[2]);
	if (ret < 0)
		return -1;
	
    return 0;
}




